#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main()
{
  // pid_t是数据类型，实际上是一个整型
  // 通过typedef重新定义了一个名字，用于存储进程id

  pid_t pid;
  pid_t cid;
  int value = 100;

  // getpid()函数返回当前进程的id号
  printf("Before fork Process id:%d\n", getpid());

  // fork()函数用于创建一个新的进程，该进程为当前进程的子进程，
  // fork的返回值：
  //     如果成功创建子进程，对于父子进程会返回不同的值，
  //     对于父进程他的返回值是子进程的id值，对于子进程，他的返回值为0
  //     如果创建失败，则返回-1

  cid = fork();

  if (0 == cid)
  {
    printf("chile process id(my parent pid is:%d):%d\n", getppid(), getpid());

    for (int i = 0; i < 3; i++)
    {
      printf("hello(%d)\n", value++);
    }
    sleep(30);
  }
  else
  {
    printf("parent process id id:%d\n", getpid());

    for (int i = 0; i < 3; i++)
    {
      printf("world(%d)\n", value--);
    }
    // wait(NULL);//等待子进程结束，再返回
  }

  // 孤儿进程->托管系统进程(pid=1)

  return 0;
}